DNS全稱Domain Name System
,它將 ithelp.ithome.com.tw
這種人們可讀取的名稱轉換為 52.199.252.220
等數字 IP 地址,讓我們在使用瀏覽器進入網站時,不需要記住這些冗長的數字,而是網域這種讓人容易記憶的名稱。這邊只要先知道DNS是一種階層式的服務且大部分公司都有自己的伺服器就可以了。
DNS資訊中包含了很多有用的資訊,例如域名、子網域資訊、IP位址等等,對後續劫持或是滲透等攻擊行為提供了必要的線索,而且對目標進行DNS資訊的收集通常都是被動的方式,不會影響目標也比較不會留下痕跡。
DNS需要收集的資訊:
由於DNS是整個網際網路公司業務的基礎,有越來越多的公司開始自己搭建DNS伺服器來做解析服務並管理公司其他子網域名,所以如果設定不當,可能將整個企業的基礎業務以及網路架構對外暴露從而造成嚴重的資訊洩露,甚至導致企業網路被滲透。
一般用法可以直接ping該伺服器的主機位置,例如直接對google的DNS伺服器測試
ping 8.8.8.8
或是直接對某個網域名稱
ping google.com
可以看到類似以下結果
PING google.com (216.58.200.46) 56(84) bytes of data.
64 bytes from tsa01s08-in-f46.1e100.net (216.58.200.46): icmp_seq=1 ttl=54 time=57.9 ms
64 bytes from tsa01s08-in-f46.1e100.net (216.58.200.46): icmp_seq=2 ttl=54 time=54.8 ms
64 bytes from tsa01s08-in-f46.1e100.net (216.58.200.46): icmp_seq=3 ttl=54 time=65.4 ms
--- google.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2004ms
rtt min/avg/max/mdev = 54.779/59.372/65.442/4.476 ms
可以看到其實有先經過DNS解析得到IP位址後,對該主機進行封包來回測試,但ping其實不能太全面瞭解整個DNS解析的過程,因為就像之前提到的,DNS其實是個階層式的服務,是經過當前網路配置的狀況去一層層問到的結果,可能修改DNS伺服器後再次測試又會得到不同的IP結果。不過ping最主要的功能是確認網路的可靠度,另外也可能對方主機沒有回應ICMP而造成ping失敗的可能性。
nslookup
可以查詢域名以及對應的IP,可以不輸入任何參數進入互動模式,或是給定想查詢的域名nslookup google.com
可以看到查詢結果
Server: 192.168.1.1
Address: 192.168.1.1#53
Non-authoritative answer:
Name: google.com
Address: 172.217.160.110
Name: google.com
Address: 2404:6800:4008:802::200e
因為這裡參數沒有給指定的DNS server,因此會透過本機當前預設的DNS server (192.168.1.1)去查詢,而查詢結果可以看到IP為17.217.160.110
,也可以以參數方式指定DNS server,這邊以google的DNS server 8.8.8.8為例
nslookup google.com 8.8.8.8
查詢結果可以看到這次是從8.8.8.8問到的結果
Server: 8.8.8.8
Address: 8.8.8.8#53
Non-authoritative answer:
Name: google.com
Address: 142.251.42.238
Name: google.com
Address: 2404:6800:4008:800::200e
這邊因為可能因為有DNS load balancing為了降載,所以可能每次問到的IP都不太一致。另外值得一提的是,nslookup已經很老了,可能已經在被淘汰的邊緣,之所以還要介紹他是因為windows上也還有這套工具能使用,如果是使用Linux的話,其實可以考慮另一個工具dig
。
dig
的使用跟nslookup
很像,但也提供了更多資訊,一般使用方式如下
dig google.com
或是透過@
符號來指定DNS server
dig google.com @8.8.8.8
查詢結果可以分成幾個區塊
QUESTION SECTION
顯示我們要查詢的域名。ANSWER SECTION
是查詢到的結果。; <<>> DiG 9.16.15-Debian <<>> google.com @8.8.8.8
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 14099
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;google.com. IN A
;; ANSWER SECTION:
google.com. 176 IN A 172.217.160.78
;; Query time: 48 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Sun Sep 19 11:11:15 EDT 2021
;; MSG SIZE rcvd: 55
dig也可以反向用IP來查詢域名,這邊我們用前面解出來的172.217.160.78
當範例
dig -x 172.217.160.78
反查結果,但反查結果跟預期好像有點不太一樣,這個之後有機會再說。
; <<>> DiG 9.16.15-Debian <<>> -x 172.217.160.78
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 55942
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;78.160.217.172.in-addr.arpa. IN PTR
;; ANSWER SECTION:
78.160.217.172.in-addr.arpa. 69112 IN PTR tsa01s09-in-f14.1e100.net.
;; Query time: 144 msec
;; SERVER: 192.168.1.1#53(192.168.1.1)
;; WHEN: Sun Sep 19 11:16:33 EDT 2021
;; MSG SIZE rcvd: 95
dnsenum
,顧名思義就是dns + enum,除了可以查域名之外,也可以透過字典暴力方式來找出子網域名。這邊先簡單用,直接輸入域名,去找出相關的子域名
dnsenum google.com
查詢結果,從結果可以看到有網域對應的IP位址,也列出了NS、MX等資訊,更有一些別名的紀錄,都是相當重要的資訊,但後面怎麼運用這些資訊才是重點,其實有這些資訊也不只是只有攻擊這個唯一的用途,事實上我們在排查網路服務相關問題時,有時候也是需要收集這些資訊的。
dnsenum VERSION:1.2.6
----- google.com -----
Host's addresses:
__________________
google.com. 20 IN A 142.251.43.14
Name Servers:
______________
ns2.google.com. 86400 IN A 216.239.34.10
ns1.google.com. 86400 IN A 216.239.32.10
ns3.google.com. 86400 IN A 216.239.36.10
ns4.google.com. 86400 IN A 216.239.38.10
Mail (MX) Servers:
___________________
alt1.aspmx.l.google.com. 293 IN A 142.250.141.26
aspmx.l.google.com. 293 IN A 108.177.97.26
alt2.aspmx.l.google.com. 293 IN A 142.250.115.26
alt4.aspmx.l.google.com. 293 IN A 142.250.152.26
alt3.aspmx.l.google.com. 293 IN A 64.233.171.26
Trying Zone Transfers and getting Bind Versions:
_________________________________________________
Trying Zone Transfer for google.com on ns2.google.com ...
AXFR record query failed: corrupt packet
Trying Zone Transfer for google.com on ns1.google.com ...
AXFR record query failed: corrupt packet
Trying Zone Transfer for google.com on ns3.google.com ...
AXFR record query failed: corrupt packet
Trying Zone Transfer for google.com on ns4.google.com ...
AXFR record query failed: corrupt packet
Brute forcing with /usr/share/dnsenum/dns.txt:
_______________________________________________
about.google.com. 86400 IN CNAME www3.l.google.com.
www3.l.google.com. 244 IN A 172.217.160.78
accounts.google.com. 216 IN A 142.251.42.237
admin.google.com. 288 IN A 142.251.42.238
ads.google.com. 185 IN A 172.217.160.78
america.google.com. 3600 IN CNAME www3.l.google.com.
www3.l.google.com. 88 IN A 142.251.43.14
今天介紹了幾個關於DNS資訊收集的工具,本來是想多寫一些細節,但礙於篇幅,可能就留待之後另開篇章來做描述吧。